using System;

namespace Atomic.Thermodynamics.StateEquations
{
	/// <summary>
	/// Static elastic energy as a function of volume at zero temperature. This is known as an equation of state (EOS).
	/// </summary>
	public interface IStateEquation
	{
		/// <summary>
		/// The energy (eV) as a function of volume (Å^3).
		/// </summary>
		double Energy(double volume);

		/// <summary>
		/// The pressure (eV/Å^3) as a function of volume (Å^3).
		/// This is also minus the derivative of the energy with respect to volume.
		/// </summary>
		double Pressure(double volume);

		/// <summary>
		/// The bulk modulus (eV/Å^3) as a function of volume (Å^3).
		/// This is also the volume multiplied the second order derivative of the energy with respect to volume.
		/// </summary>
		double BulkModulus(double volume);

		/// <summary>
		/// Equilibrium energy (eV).
		/// </summary>
		double EquilibriumEnergy
		{
			get;
		}

		/// <summary>
		/// Equilibrium volume (Å^3).
		/// </summary>
		double EquilibriumVolume
		{
			get;
		}

		/// <summary>
		/// Equilibrium bulk modulus (eV/Å^3).
		/// </summary>
		double EquilibriumBulkModulus
		{
			get;
		}

		double EquilibriumBulkModulusPressureDerivative
		{
			get;
		}
	}
}
